Skip to content

[PM-43083][PM-43122] Show header breadcrumbs and identity tiles for every vault scope - #23021

Open
gbubemismith wants to merge 1 commit into
mainfrom
PM-43083/vault-header-scopes
Open

[PM-43083][PM-43122] Show header breadcrumbs and identity tiles for every vault scope#23021
gbubemismith wants to merge 1 commit into
mainfrom
PM-43083/vault-header-scopes

Conversation

@gbubemismith

@gbubemismith gbubemismith commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

🎟️ Tracking

📔 Objective

Gives the scoped vault header the right identity on every destination, across web and desktop:

  • All items / My vault — a title preceded by the colored icon tile the side nav uses (brand list tile / the user's avatar-tinted vault tile).
  • Organization vaults (All vault items, My items, shared folders) — a breadcrumb trail whose active crumb is promoted to the page heading.

Fixes:

  • PM-43083 (web): the "My items" page rendered with no header name under the organization data-ownership policy.
  • PM-43122 (desktop): the All vault items, Archive, and Trash screens errantly titled themselves "Vault" instead of their scope.

📸 Screenshots

Web

Screen.Recording.2026-09-04.at.19.45.40.mov

Desktop

Screen.Recording.2026-09-04.at.19.47.04.mov

…for every vault scope

Give the scoped vault header the right identity on every destination, across web
and desktop: a title with an icon tile for All items / My vault, and a breadcrumb
trail for organization vaults (All vault items, My items, shared folders).

Fixes the blank "My items" header under the organization data-ownership policy
(PM-43083, web) and the desktop screens that errantly titled themselves "Vault"
instead of their scope (PM-43122).

The scope-to-title and scope-to-tile logic is shared through libs/vault
(vaultScopeTitle, vaultScopeHeaderTile) so both clients derive the header the same
way. bit-header gains a title-icon slot to host the tile in its heading.
@gbubemismith gbubemismith added the ai-review Request a Claude code review label Sep 4, 2026
@gbubemismith gbubemismith changed the title [PM-43083][PM-43122] fix: show header breadcrumbs and identity tiles for every vault scope [PM-43083][PM-43122] Show header breadcrumbs and identity tiles for every vault scope Sep 4, 2026
@gbubemismith gbubemismith added the t:bugfix Change Type - Bugfix label Sep 4, 2026
@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

🤖 Bitwarden Claude Code Review

Overall Assessment: REQUEST CHANGES

Reviewed the scoped vault header work across web, desktop, and the shared component library: the title-icon slot added to bit-header and both app-header wrappers, the rename of vault-collection-breadcrumbs to vault-breadcrumbs with its new data-driven trail, and the new vaultScopeTitle/vaultScopeHeaderTile helpers. Verified that every i18n key the new code reaches for (allItems, allVaultItems, myItemsV2, sharedFolders, archiveNoun, myVault, trash, plus breadcrumbs/moreBreadcrumbs for desktop's first use of bit-breadcrumbs) exists in both the web and desktop locales, that the rename left no dangling references or files behind, and that promotion of the active crumb still leaves exactly one <h1> on each scope. One accessibility regression on the organization "All vault items" page is worth addressing before merge.

Code Review Details
  • ⚠️ : Organization crumb renders as a focusable no-op button on the All vault items page, where its route is deliberately unset
    • libs/vault/src/components/vault-breadcrumbs/vault-breadcrumbs.component.html:2

@gbubemismith
gbubemismith marked this pull request as ready for review September 4, 2026 23:47
@gbubemismith
gbubemismith requested review from a team as code owners September 4, 2026 23:47
@@ -0,0 +1,21 @@
<bit-breadcrumbs>
<bit-breadcrumb [route]="orgRootCrumbRoute()">

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ IMPORTANT: On an organization's All vault items page this crumb renders as a focusable button that does nothing.

Details and fix

orgRootCrumbRoute() is undefined when collectionId() is null, which is exactly the All vault items page — a page that previously showed no breadcrumbs at all, so this is new behavior.

bit-breadcrumbs renders a crumb three ways (breadcrumbs.component.html:11-48): active → <span>/<h1>, has a route → <a>, otherwise → <button type="button" (click)="breadcrumb.onClick($event)">. With no route and no (click) bound here, the organization name becomes a tab stop announced as "button", carrying the hover:!tw-text-fg-brand link affordance, that does nothing when activated. The same applies to its collapsed form in the overflow menu (breadcrumbs.component.html:118-122).

Rendering it as static text would fix both — for example a text/static mode on bit-breadcrumb that reuses the active-crumb <span> branch without aria-current, used when orgRootCrumbRoute() is unset.

(Restoring the route is not the fix — on a URL with no query params the org crumb would then also match router.isActive, and both it and the All vault items crumb would render as <h1 aria-current="page">.)

@codecov

codecov Bot commented Sep 5, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 71.66667% with 17 lines in your changes missing coverage. Please review.
✅ Project coverage is 55.61%. Comparing base (7972df6) to head (fbd7f53).
⚠️ Report is 2 commits behind head on main.
✅ All tests successful. No failed tests found.

Files with missing lines Patch % Lines
.../desktop/src/vault/app/vault-v3/vault.component.ts 0.00% 8 Missing ⚠️
libs/vault/src/models/vault-scope.ts 11.11% 8 Missing ⚠️
...s/vault-breadcrumbs/vault-breadcrumbs.component.ts 95.83% 0 Missing and 1 partial ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main   #23021      +/-   ##
==========================================
+ Coverage   55.57%   55.61%   +0.03%     
==========================================
  Files        4412     4412              
  Lines      140969   141022      +53     
  Branches    22392    22401       +9     
==========================================
+ Hits        78350    78424      +74     
+ Misses      56918    56884      -34     
- Partials     5701     5714      +13     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@jaasen-livefront jaasen-livefront left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good. Just a small comment.

I think Claude has a good point in breadcrumbs.html , we should avoid rendering non-interactive elements as buttons.

Comment on lines +67 to +70
* The icon tile for the "All items" destination, which spans every vault and so belongs to no one
* of them — the brand list tile the side nav and the page header share. A fixed triple, so a shared
* frozen value rather than a factory like {@link orgIconTile}.
*/

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure how helpful this comment is. I think it's pretty obvious what this is doing. It also mentions the consuming components which could change and cause misinformation.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ai-review Request a Claude code review t:bugfix Change Type - Bugfix

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants